//============================================================================================
/**
 * @file	fd_shop_sys.h
 * @brief	フレンドリィショップ処理用定義ファイル
 * @author	Hiroyuki Nakamura
 *          Akito Mori
 * @date	2008.06.22 ( since 2004.12.15 )
 */
//============================================================================================

#ifndef __FD_SHOP_SYS_H__
#define __FD_SHOP_SYS_H__


#include "savedata/pkthln_svdata.h"
#include "savedata/bonguri.h"
#include "ps_shop.h"

// メインシーケンス
enum {
	SHOP_SEQ_INIT = 0,		// 初期化
//	SHOP_SEQ_MENU,			// メニュー選択

	SHOP_SEQ_BUY_INIT,		// 購入画面初期化
	SHOP_SEQ_BUY_SCROLL,	// 購入位置へスクロール
	SHOP_SEQ_BUY_SELECT,	// アイテム選択
	SHOP_SEQ_BUY_SELECT_RETURN,
	SHOP_SEQ_BUYSEL_WAIT,	// 「いくつ〜」表示ウェイト
	SHOP_CURSOR_ANIME_SELECT_WAIT,	// どうぐ選択時のカーソルアニメ待ち
//	SHOP_CURSOR_ANIME_CANCEL_WAIT,	// ショップ画面やめる時のカーソルアニメ待ち
	SHOP_SEQ_BUYNUM_SEL,	// 個数選択
	SHOP_SEQ_BUYNUM_ENTER,	// 個数選択決定
	SHOP_SEQ_BUYNUM_CANCEL,	// 個数選択キャンセル
	SHOP_SEQ_BUYNUM_WAIT,	// 「合計〜なりますが」表示ウェイト
	SHOP_SEQ_BUY_YESNO,		// はい・いいえ選択
	SHOP_SEQ_BUY_CMP,		// 購入
	SHOP_SEQ_BUYCMP_WAIT,	// アイテム選択へ
	SHOP_SEQ_CANT_BUY_WAIT,	// お金が足りなくて買えなかった
	SHOP_SEQ_BUYOMAKE_WAIT,	// プレミアボール待ち
	SHOP_SEQ_BUY_CANCEL,	//「やめる」
	SHOP_SEQ_BUY_SUBLCD_END,// 下画面復帰
	SHOP_SEQ_BUY_END,		// 購入画面終了

	SHOP_SEQ_BUY_PAGE_SUB,		// 前のページへ
	SHOP_SEQ_BUY_PAGE_ADD,		// 次のページへ
	SHOP_SEQ_BUY_BUTTON_ANM,	// ボタンアニメ

//	SHOP_SEQ_MENU_RET,		// メニュー選択へ戻り待ち

	SHOP_SEQ_SALE_INIT,		// 「売る」初期化
	SHOP_SEQ_SALE_CALL,		// 「売る」呼び出し
	SHOP_SEQ_SALE_WAIT,		// 「売る」終了待ち
	SHOP_SEQ_SALE_RET,		// 「売る」終了 -> フェードイン
	SHOP_SEQ_SALE_MENU_RET,	// フェードイン -> メニューへ

//	SHOP_SEQ_EXIT,
	SHOP_SEQ_END,


};

// ウィンドウインデックス
enum {
//	WIN_IDX_NENU = 0,		// メニュー
//	WIN_IDX_FLDTALK = 0,	// フィールド会話

	WIN_IDX_LIST = 0,	// アイテムリスト
	WIN_IDX_INFO,		// アイテム説明
	WIN_IDX_GOLD,		// おこずかい
	WIN_IDX_NUM,		// 個数選択
	WIN_IDX_MINE,		// 持っている数
	WIN_IDX_TALK,		// 会話

	WIN_IDX_MAX
};

// セルアクター定義
enum {
	SHOP_CLA_ARROW_U = 0,
	SHOP_CLA_ARROW_D,
	SHOP_CLA_CURSOR,
	SHOP_CLA_ITEMICON,

	SHOP_CLA_S_ITEMICON0,
	SHOP_CLA_S_ITEMICON1,
	SHOP_CLA_S_ITEMICON2,
	SHOP_CLA_S_ITEMICON3,
	SHOP_CLA_S_ITEMICON4,
	SHOP_CLA_S_ITEMICON5,

	SHOP_CLA_S_CURSOR,
	SHOP_CLA_S_PAGEDOWN,
	SHOP_CLA_S_PAGEUP,

	SHOP_CLA_S_CANCEL,

	SHOP_CLA_S_NUMUP10,
	SHOP_CLA_S_NUMUP1,
	SHOP_CLA_S_NUMDOWN10,
	SHOP_CLA_S_NUMDOWN1,
	SHOP_CLA_S_BUY,

	SHOP_CLA_MAX,
};

// 下画面再描画に使うコマンド
enum{
	SUBLCD_NO_REFRESH = 0,		// 再描画無し
	SUBLCD_REFRESH_LIST,		// リスト描画
	SUBLCD_REFRESH_SELECT,		// どうぐ選択
	SUBLCD_REFRESH_SELECT_EX,	// どうぐ選択（個数選択なし）
	SUBLCD_REFRESH_RELIST,		// リスト再構築
	SUBLCD_REFRESH_LIST_ONLY,	// リスト再描画だけ
	SUBLCD_REFRESH_SELECT_NUM,	// どうぐ選択時個数のみ変更
	SUBLCD_REFRESH_PRICE_TALK,	// いくらになります
	SUBLCD_REFRESH_BUY_YESNO,	// はい・いいえ表示
	SUBLCD_REFRESH_BUY_MESSAGE,	// 購入メッセージ表示
	SUBLCD_REFRESH_CANT_BUY,	// おかねがたりませんよ
	SUBLCD_REFRESH_CMP_FALSE,	// ＸＸが いっぱい
	SUBLCD_REFRESH_CMP_FALSE_EX,	// ＸＸが いっぱい（個数選択なし）
	SUBLCD_REFRESH_PREMIUM_MESSAGE,	// プレミアボールどうぞ
};


// タッチに対応させるナンバー定義
enum{

	CURSORPOS_ITEM0=0,	// どうぐ６つ
	CURSORPOS_ITEM1,
	CURSORPOS_ITEM2,
	CURSORPOS_ITEM3,
	CURSORPOS_ITEM4,
	CURSORPOS_ITEM5,

	CURSORPOS_SUBPAGE,	// ページ戻る
	CURSORPOS_ADDPAGE,	// ページ進める

	CURSORPOS_END,		// やめる

	CURSORPOS_BUY,		// 買う
};


// タッチ入力が何もされていないときに入っているコード
// touch_arretに入力する
#define SHOP_TOUCHCODE_NONE	( RECT_HIT_NONE )

// 一画面に入るどうぐの数
#define SHOP_PAGE_ITEM_NUM	( 6 )


#define SHOP_MODE_LIST		( 0 )
#define SHOP_MODE_SELECT	( 1 )
#define SHOP_MODE_SELECT_EX	( 2 )	// 道具決定後、個数選択なし

//============================================================================================
//	構造体定義
//============================================================================================

// 冒険ノート用ワーク
typedef struct {
	u16	buy_cnt;
	u16	sale_cnt;
}SHOP_FNOTE_WORK;

// ボタンアニメワーク
typedef struct {
	u8	id;
	u8	seq;
	u8	cnt;
	u8	next;
}SHOP_BUTTON_ANM_WORK;

typedef struct {
	GF_BGL_INI * bgl;		// BGLデータ
	void * bag_wk;			// バッグのワーク

	GF_BGL_BMPWIN	win[WIN_IDX_MAX];	// BMPウィンドウ
	GF_BGL_BMPWIN	yn_win;				// BMPウィンドウ（はい・いいえ）

	BMPLIST_WORK * lw;		// BMPメニューワーク
	BMP_MENULIST_DATA * ld;	// BMPリストデータ

	BMPMENU_WORK * mw;		// BMPメニューワーク
	BMP_MENULIST_DATA * md;	// BMPメニューデータ

	MSGDATA_MANAGER * mman;	// メッセージデータマネージャ
	WORDSET * wset;			// 単語セット

	GF_CAMERA_PTR	camera;

	FIELD_CLACT	fcat;
	CLACT_WORK_PTR	cwp[SHOP_CLA_MAX];
	u16	scr_draw[2];		// ページスクロール用の矢印アクターを表示制御するためのフラグ配列

	MYSTATUS * my;
	void     * myitem;			// 自分が持っているどうぐ構造体
								// (MYITEMじゃないのはGOODSにもキャストするため）
	CONFIG   * cfg;
	PKTHLN_SV_DATA_PTR	pokethlon_save;		// ポケスロンセーブデータ型
	BONGURI_SAVE		*bonguri;			// ぼんぐりセーブデータ型

	RECORD * rec;				// ゲーム内カウント構造体

	EVENTWORK * evwk;			// イベントワーク(デパート購入回数をカウントするためだけに使用）
	BOOL	dp_flg;				// デパートフラグ(デパートでの購入回数をカウントするため）

	u16 * item;					// 購入可能アイテムの配列
	const PS_SHOP_DATA *psitem;
	u8	max;					// 最大数
	u8	scr;					// 現在のページ
	u8	seq;					// メインシーケンス
	u8	mode;					// 0 = 買う、1 = 売る

	STRBUF * msgb;				// メッセージウインドウ用領域

	u8	pri[4];					// ショップ起動時のフィールドBGプライオリティに修正するためのワーク
	int	disp;					// ショップ起動時のBG表示設定に復帰するためのワーク

	u8	midx;		// メッセージインデックス
	u8	cm_cnt;		// カメラ移動カウンタ
	u8	cm_max;		// カメラ移動カウント数

	u8	shop_type;				// ショップタイプ(SHOP_TYPE_ITEM,SHOP_TYPE_GOODS,SHOP_TYPE_SEAL)

	u16	sel_item;				// リストで選択したどうぐ番号
	s16	sel_num;				// どうぐの購入数ワーク
	u16	sel_max;				// どうぐの購入可能最大数
	u32	sel_price;				// どうぐの購入価格

	int cursor_pos;

	u32	touch_arret;			// タッチパネルからの決定事項（キーよりも優先させる）
	int	sublcd_refresh;			// 下画面書き換え命令（0:なし	1:書き換え）

	SHOP_BUTTON_ANM_WORK	button_anm_work;

	SHOP_FNOTE_WORK * fnwk;

}SHOP_WORK;


extern BOOL GMEVENT_Shop( GMEVENT_CONTROL * event );
extern BOOL GMEVENT_ShopSale( GMEVENT_CONTROL * event );

extern void ShopSubActVisible( SHOP_WORK *wk, int mode );
extern int  Shop_GetMyItemNum( SHOP_WORK *wk, int item );
extern void ShopBuyActSet( SHOP_WORK * wk );
extern  u32 ShopBuyItemPriceGet( SHOP_WORK * wk, u16 item );
extern int ShopCheckBuyItem( SHOP_WORK *wk, int gold );


#endif